/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes.dcanolop;
import futbol.tacticas.Comando;
import futbol.tacticas.SituacionJugadores;
import java.awt.Point;
import java.util.*;
/**
 *
 * @author Daniel Esteban Cano
 */
public class Equipo {
    private Vector<Jugador> jugadores;
    public Equipo(){
        jugadores=new Vector();
        //Arquero arquero=new Arquero(-150,0,7,0,30, -30);
        Arquero arquero=new Arquero(-150,0,2,0,30, -30);
        
        //DCentral DCentralIzquierdo=new DCentral(-110,-25,6,1);
        Arquero DCentralIzquierdo=new Arquero(-110,-25,6,1,0,-60);
        
        Arquero DCentralDerecho=new Arquero(-110, 25, 6, 2, 60,0);
        //DCentral DCentralDerecho=new DCentral(-110, 25, 6, 2);
        
        DLateral DLateralIzquierdo=new DLateral(-50,-20,6,3);
        
        DLateral DLateralDerecho=new DLateral(-50,20,6,4);
        
        MCentral mCentral=new MCentral(0,0,7,5);        
        
        MLateral mLateralIzquierdo=new MLateral(0,-50,3,6);
        
        MLateral mLateralDerecha=new MLateral(0,50,3,7);
        
        Armador armador=new Armador(70,0,5,8);
        //Armador armador=new Armador(70,0,3,8);
        Delantero delanteroIzquierdo=new Delantero(100,-30,10,9);
        
        Delantero delanteroDerecho=new Delantero(100,30,10,10);
        
        jugadores.addElement(arquero);
        jugadores.addElement(DCentralIzquierdo);
        jugadores.addElement(DCentralDerecho);
        jugadores.addElement(DLateralIzquierdo);
        jugadores.addElement(DLateralDerecho);
        jugadores.addElement(mCentral);
        jugadores.addElement(mLateralIzquierdo);
        jugadores.addElement(mLateralDerecha);
        jugadores.addElement(armador);
        jugadores.addElement(delanteroIzquierdo);
        jugadores.addElement(delanteroDerecho);
    }
    
    public int getFuerza(int n) {
        return jugadores.elementAt(n).getFuerza();
    }

    public double getXInicial(int n) {
        return jugadores.elementAt(n).getPosXInicial();
    }

    public double getYInicial(int n) {
        return jugadores.elementAt(n).getPosYInicial();
    }
    
    public double getDistacia2DPuntos(Point PUno, Point PDos){
        double resultado=Math.pow((PDos.getX()-PUno.getX()), 2);
        resultado += Math.pow((PDos.getY()-PUno.getY()), 2);
        resultado = Math.sqrt(resultado);
        return resultado;
    }
    
    //el equipo esta a la defensa o al ataque o busqueda del balon
    //defensa cuando ninguno del equipo esta cerca del balon
        //estado=0
        //quien tiene la pelota= al jugador que ba a ir a atacar buscar la pelota
    //ataque cuando uno del equipo tiene el balo
    //busqueda del balon cuando uno del equipo esta mas cerca del balon que un jugador del equipo contrario
    public Vector<Comando> getComandos(SituacionJugadores sj) {
        Vector<Comando> comandosEquipo=new Vector();
        int estado; //0 defensa , 1 ataque, 2 busqueda
        int quienTienePelota=sj.getMasCercanoDeBola();
        
        //determino el estado del equipo
        if(sj.estoyMasCercaDeBola()){
            //determino si estoy buscando la pelota o uno de lo jugadores la tiene
            estado=1; // estado ataque
            Point puntoJugador=sj.getMisJugadores()[quienTienePelota];
            if(sj.getBola()!=puntoJugador){// si mi posicion es diferente a la de la pelota debo buscarla
                estado=2; // estoy buscando; 
            }
        }else{
            estado=2; // en ves de decir que estoy a la defensa si no tengo un jugador cerca de la bola
            //el jugador mas cercano va a ir a atacar la bola
        }
              
        
        Vector<Comando> comandosArquero=jugadores.elementAt(0).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDCentralIzquierda=jugadores.elementAt(1).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDCentralDerecha=jugadores.elementAt(2).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDLateralIzquierda=jugadores.elementAt(3).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDLateralDerecho=jugadores.elementAt(4).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosMCentral=jugadores.elementAt(5).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosMLateralIzquierdo=jugadores.elementAt(6).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosMLateralDerecho=jugadores.elementAt(7).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosArmador=jugadores.elementAt(8).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDelanteroIzquierdo=jugadores.elementAt(9).getComandos(sj, estado, quienTienePelota);
        Vector<Comando> comandosDelanteroDerecho=jugadores.elementAt(10).getComandos(sj, estado, quienTienePelota);
        
        Iterator<Comando> comandoArquero=comandosArquero.iterator();
        Iterator<Comando> comandoDCentralIzquierda=comandosDCentralIzquierda.iterator();
        Iterator<Comando> comandoDCentralDerecha=comandosDCentralDerecha.iterator();
        Iterator<Comando> comandoDLateralIzquierda=comandosDLateralIzquierda.iterator();
        Iterator<Comando> comandoDLateralDerecho=comandosDLateralDerecho.iterator();
        Iterator<Comando> comandoMCentral=comandosMCentral.iterator();
        Iterator<Comando> comandoMLateralIzquierdo=comandosMLateralIzquierdo.iterator();
        Iterator<Comando> comandoMLateralDerecho=comandosMLateralDerecho.iterator();
        Iterator<Comando> comandoArmador=comandosArmador.iterator();
        Iterator<Comando> comandoDelanteroIzquierdo=comandosDelanteroIzquierdo.iterator();
        Iterator<Comando> comandoDelanteroDerecho=comandosDelanteroDerecho.iterator();
        
        while(comandoArquero.hasNext() || comandoDCentralIzquierda.hasNext() || comandoDCentralDerecha.hasNext() ||
                comandoDLateralIzquierda.hasNext() || comandoDLateralDerecho.hasNext() || comandoMCentral.hasNext() ||
                comandoMLateralIzquierdo.hasNext() || comandoMLateralDerecho.hasNext() || comandoArmador.hasNext() ||
                comandoDelanteroIzquierdo.hasNext() || comandoDelanteroDerecho.hasNext()){
            if(comandoArquero.hasNext()){
                comandosEquipo.addElement(comandoArquero.next());
            }
            if(comandoDCentralIzquierda.hasNext()){
                comandosEquipo.addElement(comandoDCentralIzquierda.next());
            }
            if(comandoDCentralDerecha.hasNext()){
                comandosEquipo.addElement(comandoDCentralDerecha.next());
            }
            if(comandoDLateralIzquierda.hasNext()){
                comandosEquipo.addElement(comandoDLateralIzquierda.next());
            }
            if(comandoDLateralDerecho.hasNext()){
                comandosEquipo.addElement(comandoDLateralDerecho.next());
            }
            if(comandoMCentral.hasNext()){
                comandosEquipo.addElement(comandoMCentral.next());
            }
            if(comandoMLateralIzquierdo.hasNext()){
                comandosEquipo.addElement(comandoMLateralIzquierdo.next());
            }
            if(comandoMLateralDerecho.hasNext()){
                comandosEquipo.addElement(comandoMLateralDerecho.next());
            }
            if(comandoArmador.hasNext()){
                comandosEquipo.addElement(comandoArmador.next());
            }
            if(comandoDelanteroIzquierdo.hasNext()){
                comandosEquipo.addElement(comandoDelanteroIzquierdo.next());
            }
            if(comandoDelanteroDerecho.hasNext()){
                comandosEquipo.addElement(comandoDelanteroDerecho.next());
            }
        }
        return comandosEquipo;
    }
}
